extends 基础状态
@export var 玩家:玩家节点

@onready var 武器相机: Camera3D = $"../../武器屏幕显示/武器显示窗口/武器窗口/武器相机"
@onready var 玩家相机: Camera3D = $"../.."
@onready var 武器搭载节点: Node3D = $"../../武器搭载节点"
@onready var 武器准心: Control = $"../../../../UI/GUI显示与管理/玩家UI/武器准心"

var 退出瞄准:bool =false
var 换弹 :bool =false
var 动画模式 = Tween.TRANS_LINEAR


func 进入状态() -> void:
	super.进入状态()
	QuanJuDebug.武器状态机更改.emit(self.name)
	var 武器瞄准点= get_node_or_null("../../武器搭载节点/"+ str(武器_状态机.当前武器.武器名称) +"/瞄准检测器")
	if 武器_状态机.当前武器.武器瞄具类型 == "无":
		var 武器操作性 = (武器_状态机.当前武器.武器操作性*武器_状态机.玩家属性节点.武器操作加成)
		create_tween().tween_property(玩家相机, "fov",(玩家.FOV设置/武器_状态机.当前武器.武器缩放倍率),武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)
		create_tween().tween_property(武器搭载节点, "position",-武器瞄准点.position, 武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)
		create_tween().tween_property(武器准心, "modulate",Color(1,1,1,0), 武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)




func 退出状态() -> void:
	super.退出状态()
	武器_状态机.武器准心.visible = true
	if 武器_状态机.当前武器.武器瞄具类型 == "无":
		var 武器操作性 = (武器_状态机.当前武器.武器操作性*武器_状态机.玩家属性节点.武器操作加成)
		create_tween().tween_property(玩家相机, "fov", 玩家.FOV设置,武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)
		create_tween().tween_property(武器搭载节点, "position", Vector3(0,0,0), 武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)
		create_tween().tween_property(武器准心, "modulate",Color(1,1,1,1), 武器操作性 * 0.4).set_ease(Tween.EASE_OUT_IN).set_trans(动画模式)



func 渲染帧更新触发(_delta: float) -> void:
	super.渲染帧更新触发(_delta)
	pass




func 物理帧更新触发(_delta: float) -> void:
	super.物理帧更新触发(_delta)
	if Input.is_action_pressed("换弹") and not 武器_状态机.武器动画播放器.is_playing():
		var 库存弹药 = 武器_状态机.玩家弹药属性.get(str(武器_状态机.当前武器.武器类型)+"弹药")
		if 库存弹药 != 0 :
			if 武器_状态机.当前武器.当前武器弹容量 < 武器_状态机.当前武器.武器弹容量:
				武器_状态机.切换状态("武器换弹")
	pass


func _input(event: InputEvent) -> void:
	if event.is_action_pressed("射击") and 武器_状态机.当前状态==武器_状态机.武器瞄准与发射:
		武器_状态机.射击()
	if  event.is_action_released("瞄准") and 武器_状态机.当前状态==武器_状态机.武器瞄准与发射:
		武器_状态机.切换状态("武器待机与腰射")
	
